home *** CD-ROM | disk | FTP | other *** search
- ;---------------------------------------------------------------------------
- ;
- ; DMS v0.12ß Instant 180-degree turns in Doom!
- ;
- ; Copyright (c) Tom Klok and Dave 'Zoid' Kirsch August, 1994
- ;
- ; Freely distributable as long as copyright and attributions
- ; are maintained.
- ;
- ; a344@mindlink.bc.ca, tom@auggy.mlnet.com
- ; zoid@mindlink.bc.ca, zoid@grog.mlnet.com
- ;
- ;---------------------------------------------------------------------------
-
- .286
-
- bk equ 8
- ht equ 9
- lf equ 10
- ff equ 12
- cr equ 13
- eof equ 26
- eos equ '$'
-
- mouse_vector equ 033h
- _buttons equ 00003h
- _mickeys equ 0000Bh
- _query equ 0DEADh
- chk_response equ 0D00Dh
- chk_version equ 0012Ah
-
- dos_vector equ 021h
- _outstr equ 00900h
- _getvec equ 03500h + mouse_vector
- _setvec equ 02500h + mouse_vector
- _tsr equ 03100h
- _free equ 04900h
- _exit equ 04C00h
- _exit1 equ _exit + 1
-
- env_offset equ 0002ch
- tail_buff equ 00081h
-
- turn_90 equ 1463
- turn_180 equ turn_90 * 2
- turn_270 equ -turn_90
-
- button_left equ 1
- button_right equ 2
- button_mid equ 4
-
- msdos macro name, val
- ifdef &name
- mov ax, &name
- ifdef &val
- mov dx, offset &val
- endif
- endif
- int dos_vector
- endm
-
- ;---------------------------------------------------------------------------
-
- code_seg segment public
- assume cs:code_seg, ds:nothing, es:nothing
- org 00100h
-
- dms: jmp install
-
- ;---------------------------------------------------------------------------
-
- align 4
- old_vector: db 'oldv'
- ; +x is right, +y is backwards
- newmickeysx dw 0 ; if non-zero, we're going to pass
- ;newmickeysy dw 0 ; if non-zero, we're going to pass
- mickeyset db 0
- button db 0 ; 1 = left, 2 = right, 4 = middle
-
- ;---------------------------------------------------------------------------
-
- dms_proc: cmp ax, _buttons ; get button info?
- je getbutton
-
- cmp ax, _mickeys ; get mickeys?
- je getmickeys
-
- cmp ax, _query ; installation check?
- jne old_handler
-
- mov ax, chk_response ; yes, we're here!
- mov bx, chk_version
- mov di, offset button
- iret
-
- old_handler:
- jmp dword ptr cs:[old_vector]
-
- getbutton: ; call the mouse handler (we're going to change it)
-
- pushf
- call dword ptr cs:[old_vector]
-
- mov al, cs:[button]
- xor bl, al
- test bl, al ; test for button set
- jnz nomickey
-
- ; button(s) were pressed... are we debouncing?
-
- cmp cs:[mickeyset], 0
- jnz doiret ; debouncing, so ignore it
-
- ; set up our fake mickeys
-
- mov cs:[newmickeysx], turn_180
- inc cs:[mickeyset] ; debouce next time
- iret
-
- nomickey:
- xor bl, al
- mov cs:[mickeyset], 0 ; not debouncing next time
- iret
-
- getmickeys: ; call the mouse handler (we're going to change it)
-
- pushf
- call dword ptr cs:[old_vector]
-
- add cx, cs:[newmickeysx] ; zoot! do the turn
- mov cs:[newmickeysx], 0
-
- ; add dx, cs:[newmickeysy]
- ; mov cs:[newmickeysy], 0
-
- doiret: iret
-
- end_of_tsr:
-
- ;---------------------------------------------------------------------------
-
- ttl: db "DMS v0.12ß (c) "
- db ??date
- db " Tom Klok/Dave 'Zoid' Kirsch",eos
- welcome: db ': installed!',cr,lf,eos
- update_str: db ': buttons updated.',cr,lf,eos
- usage_str: db cr,lf,lf,"Usage: DMS -[l][m][r] where LMR represent "
- db "Left, Mid, Right mouse buttons.",cr,lf
- db "The default button selection is '-r' for Right."
- db cr,lf,lf,"Freely distributable. "
- db "Queries or comments to a344@mindlink.bc.ca."
- crlfeos db cr,lf,eos
- buttons_str db "Mouse buttons to activate: ",eos
- left_str db "left+",eos
- middle_str db "middle+",eos
- right_str db "right+",eos
- backup_str db bk,"."
- db cr,lf,eos
-
- ;---------------------------------------------------------------------------
-
- install:
- msdos _outstr, ttl
-
- ; chk command line for mouse button preferences
-
- mov si, tail_buff+1
- chk_cmd:
- lodsb
-
- cmp al, cr ; is it the terminator?
- je cmd_done
- cmp al, 0
- je cmd_done
-
- cmp al, ' '
- je chk_cmd
- cmp al, '-'
- je chk_cmd
- cmp al, '/'
- je chk_cmd
-
- and al, 0dfh ; to uppercase
-
- cmp al, 'L'
- jne next2
- or cs:[button], button_left
- jmp chk_cmd
- next2:
- cmp al, 'R'
- jne next3
- or cs:[button], button_right
- jmp chk_cmd
- next3:
- cmp al, 'M'
- jne show_usage
- or cs:[button], button_mid
- jmp chk_cmd
- show_usage:
- msdos _outstr, usage_str
- msdos _exit1
- cmd_done:
- cmp cs:[button], 0
- jne moreinstall
- or cs:[button], button_right
- moreinstall:
- mov ax, _query
- int mouse_vector
- cmp ax, chk_response
- je change_button
-
- msdos _outstr, welcome
-
- msdos _getvec ; es:bx <- int 33h pointer
- mov word ptr [old_vector], bx
- mov word ptr [old_vector + 2], es
- msdos _setvec, dms_proc ; int 33h pointer <- ds:dx
-
- call display_buttons
-
- mov ax, ds:[env_offset] ; get envt segment
- mov es, ax
- msdos _free
-
- mov dx, offset end_of_tsr
- add dx, 15
- shr dx, 4
- msdos _tsr
-
- change_button:
- push di
- msdos _getvec ; es:bx <- int 33h pointer
- mov al, cs:[button]
- pop di
- mov es:[di], al
-
- msdos _outstr, update_str
- call display_buttons
- msdos _exit1
-
- display_buttons:
- msdos _outstr, buttons_str
- test cs:[button], button_left
- je db1
- msdos _outstr, left_str
- db1:
- test cs:[button], button_mid
- je db2
- msdos _outstr, middle_str
- db2:
- test cs:[button], button_right
- je db3
- msdos _outstr, right_str
- db3:
- msdos _outstr, backup_str
- ret
-
- ;---------------------------------------------------------------------------
-
- code_seg ends
- end dms
-
-